<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <!-- 
    let var const 的区别：
      var存在变量提升，可以重复定义一个变量，声明的变量可以修改
      let没有变量提升，不可以重复定义一个变量，申明的变量可以修改 (只在你当前作用域内有效) 存在暂时性死区
        暂时性死区就是在一个块级作用域内在声明前使用了变量
      const没有变量提升，不可以重复定义一个变量，声明的变量不可以修改
    面试题：
      下面的面试题关键点在于let声明的变量会在每次循环时产生一个块级作用域，每个块级作用域
        的变量就是都是不同的，
   -->
   <script>
     var arr = []
     for(var i = 0; i < 2; i++){
       arr[i] = function(){
         console.log(i);
       }
     }
    //  console.log(i); //2
    // 这里使用var声明，因为不会产生块级作用域所以每次输出的就是循环结束后的全局作用域中的i，也就是2
     arr[0]() //2
     arr[1]() //2
     console.log('-----------')
     let arr1 = []
     for(let i = 0; i < 2; i++){
       arr1[i] = function(){
         console.log(i);
       }
     }
    //  这里的变量使用let声明，每次循环都会产生一个块级作用域，所以i就是当块级作用域i的值
     arr1[0]() //0
     arr1[1]() //1
   </script>
</body>
</html>